/*
* 全局函数,全局函数均不带命名空间，可直接调用
*/
/**
 * 命名空间
 * eg. namespace('base.user');
 */
function namespace() {
    var a = arguments, o = null, i, j, d, rt;
    for (i = 0; i < a.length; ++i) {
        d = a[i].split('.');
        rt = d[0];
        eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
        for (j = 1; j < d.length; ++j) {
            o[d[j]] = o[d[j]] || {};
            o = o[d[j]];
        }
    }
}
/**
 * 跳转到指定的url地址
 * 解决IE下location.href相对路径问题
 * @param location 相对路径
 */
function toLocation(location) {
	var base = $('base').attr('href');
	//TODO: 我在IE10下测试发现前面不加document的话，没反应；
	document.location.href = (base + location);
}

/**
 * 分页函数
 * @param action 页码按钮点击处理函数
 * @param selector 分页对象选择器,默认为.pagination
 */
function initPagination (action,selector) {
	if (!selector) {
		selector = $('.pagination');
	}
	var pageNo = selector.attr('page');
	var totalPages = selector.attr('totalPages');
	//上一页、第一页事件
	if (selector.find('.first').attr('isFirst') == 'true') {
		selector.find('.first').addClass('disabled');
		selector.find('.prev').addClass('disabled');
	}else{
		selector.find('.first').unbind().click(function() {
			if (action) {action(1);} 
		});
		selector.find('.prev').unbind().click(function() {
			if (action) {action(pageNo-1);} 
		});
	}
	//下一页、最后一页事件
	if (selector.find('.last').attr('isLast') == 'true') {
		selector.find('.last').addClass('disabled');
		selector.find('.next').addClass('disabled');
	}else{
		selector.find('.last').unbind().click(function() {
			if (action) {action(totalPages);} 
		});
		selector.find('.next').unbind().click(function() {
			if (action) {action(parseInt(pageNo) + 1);} 
		});
	}
	selector.find('li[page=' + pageNo + ']').addClass('active');
	selector.find('li[page]').unbind().click(function() {
		var currentNo = $(this).attr('page');
		if (action) {
			action(currentNo);
		} 
	});

}

/**
 * 初始化实体选择器
 * @param selector 要初始化的对象，默认为 .entity-selector
 * @param callback 回调函数(可选)
 */
function initEntitySelector(selector,callback){
	if(!selector)	selector = '.entity-selector';
	//添加选择器事件
	$(selector).each(function(){
		var forObj =  $(this).attr('for');
		var entityKey =  $(this).attr('entityKey');
		var title = $(this).attr('title');
		var param = {'data':forObj,'callback' : callback ? callback : _defaultEntitySelectorCallback};
		$(this).click(function(){
			var selectedIds = $('#'+forObj).val();
			var url = 'base/entityselector/selector.action?entityKey='+entityKey+'&selectedIds='+selectedIds;
			openModalWindow(url ,title,param);
		});
	});
	$('.entity-container').find('A').each(function(){
		_bindEraserEvent($(this));
	});
}
/*
 * 实体选择器相关私有函数
 * @param 绑定清除图标 obj
 */
function _bindEraserEvent(obj){
	obj.mouseenter(function(){
		var entity = $(this);
		if(!entity.next().is('.entity-eraser')){
			//实体清除图标
			var eraser = $('<i>',{
				'class':	'entity-eraser icon-remove',
				title:		'清除',
				click:		function(){
					_eraseEntity(entity);
				}
			});
			entity.after(eraser);
		}
		entity.next('.entity-eraser').fadeIn('slow');
	}).mouseleave(function(){
		$(this).next('.entity-eraser').delay(2000).fadeOut('slow');
	});
}
/*
 * 实体选择器相关私有函数
 * 清除实体对象
 * @param entity 清除对象
 */
function _eraseEntity(entity){
	var forObj = entity.parent().attr('for');
	$('#'+forObj).val('');
	entity.parent().empty();
}
/*
 * 实体选择器相关私有函数
 * 默认实体选择器回调函数
 * @param forObj 要修改的input对象id
 * @param data
 */
function _defaultEntitySelectorCallback(forObj, data){
	var idsArray = new Array();
	var entityArray = new Array();
	$.each(data,function(i,item){
		idsArray.push(item.id);
		var entity = $(item.entity);
		entity = entity.is('A') ? entity : $('<a>'+item.entity+'</a>');
		entityArray.push(entity.outerHTML());
	});
	$('#' + forObj).val(idsArray.join());
	$('.entity-container[for="'+forObj+'"]').empty().append(entityArray.join());
	$('.entity-container[for="'+forObj+'"]').find('A').each(function(){
		_bindEraserEvent($(this));
	});
	return true;
}

/**
 * 打开模式窗口,iframe类型的,url必须
 * @param url iframe URL
 * @param title 窗口标题
 * @param param  自定义参数,自定义参数通过data()函数缓存在body属性中,key值为MODAL_DIALOG_PARAM
 */
function openModalWindow(url, title,param){
	//TODO 参数判断
	if(!param){ param={};}
	$('body').removeData(MODAL_WIN_PARAM).data(MODAL_WIN_PARAM,param);
	if (!$('#window').attr('id')) {
		$('body').append('<div id="window" class="hide"></div>');
		$('#window').kendoWindow({
			modal:true,
	        width: '800px',
	        height: '500px',
	        title: title,
	        iframe: true,
	        actions: ['Refresh', 'Maximize', 'Close'],
	        content: url,
	        close: function(){
	        	$('body').removeData(MODAL_WIN_PARAM);
	        }
	    });
	}
	$('#window').removeClass('hide').data('kendoWindow').open().center();
}

/**
 * 初始化选择器打开的列表页面,table上需默认加.table-selector样式，返回显示列上加.primary样式
 * @param selector  列表的选择器，默认为.table-selector
 * @param clickHandler  click事件处理函数
 */
function initSelectorList(clickHandler,selector){
	if(!clickHandler)	clickHandler = function(returnData){
		parent.closeModalWindow(returnData);
	};

	if(!selector)	selector = '.table-selector';
	
	$(selector).find('tbody tr').each(function(){
		var id = $(this).attr('id');
		var entity = $(this).find('.primary').html();
		$(this).click(function(){
			clickHandler([{'id':id,'entity':entity}]);
		});
	});
	
}
/**
 * 关闭父页面窗口并调用回调函数
 * @param returnData  返回值
 */
function closeModalWindow(returnData) {
	var param = $('body').data(MODAL_WIN_PARAM);
	var callback = param.callback;
	var data = param.data;
	if(callback)	callback(data,returnData);
	$('#window').data('kendoWindow').close();
}
/**
 * 初始化页面中的checkBox，根据checkBox上的fieldValue属性添加checked属性
 * @param selector（optional） 默认选择器为input[checkbox]
 */
function initCheckBox(selector){
	if(!selector)	selector = ':checkbox';
	$(selector).each(function(){
		var fieldValue = $(this).attr('fieldValue');
		//fieldValue属性值和value值相同时checked
		if(fieldValue == $(this).val()){
			$(this).attr('checked','checked');
		}
	});
}
/**
 * 初始化页面中的radio，根据radio上的fieldValue属性添加checked属性
 * @param selector（optional） 默认选择器为input[radio]
 */
function initRadio(selector){
	if(!selector)	selector = ':radio';
	$(selector).each(function(){
		var fieldValue = $(this).attr('fieldValue');
		//fieldValue属性值和value值相同时checked
		if(fieldValue == $(this).val()){
			$(this).attr('checked','checked');
		}
	});
}